package day13;

import java.util.*;

public class HashMapStudy {

    public static void main(String[] args) {
        String str="asdasdfsdfwefhdkajsasjklasjdmasnd";
        str=count(str);
        System.out.println(str);

    }


//    题目一：统计字符串中出现的次数:asdasdfsdfwefhdkajsasjklasjdmasnd,并按照a(2)b(5)c(9)d(7)的格式以及出现的次数进行排序
//
//    思路： * 1、将字符串转为字符数组，将这个字符串中的字符当作map集合中的Key,将出现的次数作为value值
//            2、当字符第一次出现的时候，那么用它在集合中进行寻找，返回值必然为null,之后将该字符对应的值改为1
//            3、如果说该字符不是第一次出现，该字符对应的值就不为null，然后就+1；
//            4、然后再按value也就是我们的出现次数进行排序
    public static String count(String str) {
        char[] charArray = str.toCharArray();
        Map<Character, Integer> map=new TreeMap<>();

        for (char c : charArray) {
            Integer value = map.get(c);
            if(value==null) {//如果是第一次,就赋值为1
                map.put(c, 1);
            }
            else {
                map.put(c, ++value);
            }
        }
        List<Map.Entry<Character, Integer>> list = new ArrayList<Map.Entry<Character, Integer>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {

            @Override
            public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                return -(o1.getValue()-o2.getValue());
            }
        });
        StringBuffer sb=new StringBuffer();//StringBuffer不会开辟新的区间,比String性能更好一些
        for (Map.Entry<Character, Integer> e : list) {
            sb.append(e.getKey()+"("+e.getValue()+")");
        }
        return sb.toString();
    }
}
